{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Coding with Qiskit Episode 5\n",
    "\n",
    "# Quantum Teleportation\n",
    "\n",
    "#### Written by Abraham Asfaw, IBM TJ Watson Research Center"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this episode of Coding with Qiskit, we learned about quantum teleportation. Briefly, quantum teleportation allows us to transfer a quantum state from one qubit to another. This might seem fundamentally impossible due to the [no-cloning theorem](https://en.wikipedia.org/wiki/No-cloning_theorem), but the reason it works is because it uses entanglement as a resource. Using the teleportation protocol, quantum information is destroyed in one place, and an exact copy is recreated in another place.\n",
    "\n",
    "The teleportation protocol was [described by Charles Bennett and co-workers in March 1993](#1), about a decade after the [no-cloning theorem was reported in October 1982](#2).\n",
    "\n",
    "**Link to Episode 5:** https://www.youtube.com/watch?v=mMwovHK2NrE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "        <iframe\n",
       "            width=\"960.0\"\n",
       "            height=\"540.0\"\n",
       "            src=\"http://www.youtube.com/embed/mMwovHK2NrE\"\n",
       "            frameborder=\"0\"\n",
       "            allowfullscreen\n",
       "        ></iframe>\n",
       "        "
      ],
      "text/plain": [
       "<IPython.lib.display.IFrame at 0x11323f390>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from IPython.display import IFrame\n",
    "IFrame(src=\"http://www.youtube.com/embed/mMwovHK2NrE\", width=1920/2, height=1080/2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Building the circuit for quantum teleportation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's say we are trying to teleport the quantum state $\\vert\\psi\\rangle$ from Alice to Bob. The teleportation protocol can be summarized as follows:\n",
    "\n",
    "1. Alice and Bob first create an entangled Bell pair between their two qubits. They do this by using the process described in the [Hello World video](https://www.youtube.com/watch?v=RrUTwq5jKM4) by applying a Hadamard and CX gate. \n",
    "\n",
    "2. Next, Alice applies a series of operations between the qubit with state $\\vert\\psi\\rangle$ and her half of the Bell pair.\n",
    "\n",
    "3. Finally, Alice measures both qubits (the one that initially contained $\\vert\\psi\\rangle$ and the other that contained her half of the Bell pair), and reports these results to Bob.\n",
    "\n",
    "4. Depending on what Alice says, Bob applies a couple of gates to his half of the Bell pair.\n",
    "\n",
    "5. And voila! The state $\\vert\\psi\\rangle$ has teleported to Bob's qubit."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the version that we are building here, Bob will apply his gates conditioned on Alice's qubits, instead of the classical outcomes of the measurements that Alice did. There is a subtle difference between these two methods. While the first method (using Alice's qubits after measurement as the controls of Bob's gates) is easy to implement, the second method (using the classical results of Alice's measurement as controls of Bob's gates) allows quantum teleportation over long distances."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<qiskit.circuit.instructionset.InstructionSet at 0x130c97400>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "circuit = QuantumCircuit(3,3)\n",
    "# QUBIT ORDERING\n",
    "# q0 = State |psi> that we want to teleport\n",
    "# q1 = Alice's half of the Bell pair\n",
    "# q2 = Bob's half of the Bell pair, the destination of the teleportation\n",
    "\n",
    "# ========================\n",
    "# Step 0: Create the state to be teleported in qubit 0\n",
    "circuit.x(0) # qubit 0 is now in state |1>, and this is the state that we want to teleport\n",
    "\n",
    "circuit.barrier() # just a visual aid\n",
    "\n",
    "# ========================\n",
    "# Step 1: create an entangled Bell pair between Alice and Bob (qubits 1 and 2)\n",
    "circuit.h(1)\n",
    "circuit.cx(1,2)\n",
    "\n",
    "circuit.barrier() # just a visual aid\n",
    "\n",
    "# ========================\n",
    "# Step 2: Alice applies a series of operations \n",
    "# between the state to teleport (qubit 0) and her half of the Bell pair (qubit 1)\n",
    "circuit.cx(0,1)\n",
    "circuit.h(0)\n",
    "\n",
    "circuit.barrier() # just a visual aid\n",
    "\n",
    "# ========================\n",
    "# Step 3: Alice measures both qubits 0 and 1\n",
    "circuit.measure([0, 1], [0, 1]) # results stored in classical bits 0 and 1, respectively\n",
    "\n",
    "circuit.barrier() # just a visual aid\n",
    "\n",
    "# ========================\n",
    "# Step 4: Now that Alice has measured the two qubits, their states have collapsed to 0 and 1. \n",
    "# Bob can do operations conditioned on these qubits to his half of the Bell pair\n",
    "# Note that while we're conditioning Bob's operation on the collapsed qubits 0 and 1, we can\n",
    "# do teleportation over long distances by transmitting the classical information in classical bits 0 and 1\n",
    "circuit.cx(1, 2)\n",
    "circuit.cz(0, 2)\n",
    "\n",
    "# Step 5: Done! Measure Bob's qubit to find out what state it is in\n",
    "circuit.measure([2], [2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As always, let's draw the circuit before simulating to make sure it's doing what we want"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 999.32x264.88 with 1 Axes>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "circuit.draw(output='mpl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Running the quantum teleportation circuit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And finally, let's simulate the circuit on Aer's `qasm_simulator`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAc0AAAFDCAYAAABY/1W1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3de7xVdZ3/8ddHQAUE7SCDkKKihmCFx0s6XjPFTHNizF8XLdNmfuZlzIZfY+Vkpk02Y3kfnczR8pLdRq00Lccob5EaAmISXhAQwQtIopgeOHx+f6wNHY7n4Nqcy97nnNfz8TgP9v6utdf5rPPl7PdZa3/Xd0VmIkmS3tpGtS5AkqSewtCUJKkkQ1OSpJIMTUmSSjI0JUkqydCUJKmk/rUuoJaGDRuWo0ePrnUZkqQ6MmPGjCWZObytZX06NEePHs2UKVNqXYYkqY40NDTMb2+Zp2clSSrJ0JQkqSRDU5KkkgxNSZJKMjQlSSrJ0JQkqSRDU5KkkgxNSZJKMjQlSSrJ0JQkqSRDU5KkkgxNSZJKMjQlSSrJ0JQkqSRDU5KkkgxNSZJKMjQlSSrJ0JQkqSRDU5KkkgxNSZJKMjQlSSrJ0JQkqSRDU1Jdu+uuu3jPe97D7rvvzsUXX/ym5Zdffjl77703++23H5MmTeKZZ55Zu2zhwoUcddRR7LXXXuy9994sWLAAgMMPP5wDDjiAAw44gPHjx/OJT3yi2/ZHPVv/WhcgSe1pbm7mjDPO4Oabb2bUqFEcfPDBHHbYYey8885r13n3u9/NlClTGDRoENdccw1nn30211xzDQAnn3wykydP5qCDDuLVV19lo42K44Tbb7997euPO+44Dj/88O7dMfVYHmlKqlvTpk1j++23Z7vttmPjjTfmqKOO4o477lhnnf33359BgwYBsMcee7Bo0SIA/vSnP7Fq1SoOOuggADbbbLO1662xfPly7r33XkNTpRmakurW4sWLefvb3772+ahRo1i8eHG7699www0ccsghADz11FNsvvnmHHfccRx44IF85Stfobm5eZ31b7/9dg444ACGDh3aNTugXsfQlNQr/PjHP2b69OmcdtppAKxatYqpU6dy7rnn8utf/5p58+Zx4403rvOam266iQ9/+MO1KFc9lKEpqW6NHDmSZ599du3zRYsWMXLkyDet99vf/pYLLriAG2+8kU022QQojkrf9a53sd1229G/f3+OOOIIHnnkkbWvWbp0KQ8//DCHHnpo1++Ieg1DU1Ld2m233Zg7dy7z58+nqamJm2++mcMOO2yddR555BEmT57MjTfeyPDhw9d57csvv8ySJUsAuOeeexg7duza5T//+c95//vfz6abbto9O6NewdGzkupW//79Of/88zn66KNpbm7m2GOPZdy4cZx33nk0NjbygQ98gLPPPpsVK1ZwwgknALD11ltz44030q9fP84991wmTZpEZrLrrrty3HHHrd32zTffzOmnn16rXVMPFZlZ6xpqprGxMadMmVLrMiRJdaShoWFaZu7R1jJPz0qSVJKhKUlSSYamJEklGZqSJJVkaEqSVJKhWSMduXPDlltuufYODcccc8za9quuuordd9+dhoYGli5d2i37IUl9iddp1kBH79wwcOBA7rnnnjdtd6+99uL9738/Rx55ZLftiyT1JR5p1kBH7tywPu9+97sZPXp0l9QsSTI0a6Ijd24AeP3113nf+97HxIkT+cUvftGltUqS/srTs3VuzZ0bbrvttrVtM2fOZNSoUcybN48PfehDjB8/nu23376GVUpS3+CRZg105M4NUByZAmy33Xbst99+69y5QZLUdQzNGujInRv+/Oc/88YbbwDFrY0eeOCBde7coA3XkRHNAMuXL2eXXXbhjDPOeNNrjznmGPbZZ58uq11S9/D0bA105M4Nc+bMYfLkyWy00UasXr2a008/fe2o2yuvvJJLL72UF154gf33359DDjmESy+9tJa72mN0dEQzwHnnnddmMN56660MHjy4W/aj3p1x7dtqXUKnOf9Ty2pdgmrA0KyRiRMnMnHixHXazjzzzLWPb7nlljZft9dee3H//fe3uewzn/kMn/nMZzqvyD6k5YhmYO2I5pahuf/++699vMcee/DjH/947fMZM2bw4osvcvDBBzNjxoy17a+++ipXXHEFF110EZ/+9Ke7fkckdSlPz0p0bETz6tWrOeusszj33HPftN55553HqaeeuvbyIUk9m6EpVWnNiObTTjsNgKuvvpqJEyeuE7oAs2bNYt68eXzwgx+sRZmSuoCnZyWqH9F82223rR3R/NBDDzF16lSuvvpqVqxYQVNTE4MHD2abbbZhxowZTJgwgVWrVrFkyRKOPPJIbr311m7bL6kr3HXXXZx55pk0NzfzyU9+ks997nPrLL/88su5/vrr6d+/P1tuuSWXXXYZ22yzDc888wyf/OQnWb16NStXruTEE09cO27jpptu4sILLyQi2GqrrbjyyisZNmxYLXZvvSIza11DzTQ2NuaUKVNqXYbqwKpVq9hzzz356U9/ysiRIzn44IP5zne+w7hx49au88gjj3D88cfzk5/8hB122KHN7dx4443MmDGD888/f532BQsW8LGPfYzf/e53Xbof9c6BQD1fc3Mze+655zqD5q666qp1Pv+/99572X333dcOmrvvvvu45ppraGpqIjPZZJNNePXVV9l333355S9/yfDhwxk/fjxTp05l2LBhnH322QwcOJAvfvGLNdnHhoaGaZm5R1vLPD0rse6I5r333ptJkyatHdG8ZorDliOaW0+WL/UVHZkGdOONN157hqapqYnVq1cDkJlkJq+99hqZySuvvMJWW23VjXtVnqdnpYoNHdHc0jHHHNNmmI4ePbrPH2Wqd2hr0Ny0adPaXb/1NKALFy7kYx/7GE8//TTnnHPO2o9BvvWtb7HvvvsyePBgxowZwze/+c2u24kO8EhTktQlWg+ag+Ka8/vuu48//OEP/PCHP+SFF15g5cqVfPe73+Xuu+/mscceY5ddduGiiy6qYeXtMzQlSaV1dBrQltvZeeedmTp1KrNmzQJg++23JyKYNGkSDz74YNftRAcYmpKk0joyDeizzz7LX/7yF6CYEvSBBx5gp512YuTIkcyZM4clS5YA8Jvf/IZ3vOMd3bdTVfAzTUlSaR2ZBvTxxx/nrLPOIiLITE499VTGjx8PwBlnnMERRxzBgAED2Gabbbj88struZvt8pITLzmRuo2XnKgn8JITSZI6gadnO4F/PUtS3+CRpiRJJRmakiSVZGhKklSSoSlJUkndHpoRcUpEPB0Rr0fEtIjYfz3rHhURd0bEixHxSkQ8EBF/t571Px4RGRG3dU31kqS+rFtHz0bER4FLgFOA+yr/3hER4zNzQRsvORCYAnwZeAk4FrglIt6bmfe22vYY4JvAvW/aivocRzRL6grdfaQ5GfheZl6VmbMz8zRgMXByWytn5umZ+e+Z+WBmPpmZ5wDTgEkt14uIAcAPgH8F5nbtLkiS+qpuC82I2BjYHbiz1aI7gX2q2NQQoPWf3l8H5mXmtRteoSRJ69edp2e3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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "result = execute(circuit, backend=simulator, shots=1024).result()\n",
    "from qiskit.visualization import plot_histogram\n",
    "plot_histogram(result.get_counts(circuit))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that the results above are ordered as $c_2c_1c_0$, with the bottom-most bit being $c_2$, which was the result of measuring the state in qubit 2. As you can see, the result is always $c_2 = 1$ since we teleported the state $\\vert1\\rangle$ to qubit 2."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Bonus: creating the teleportation circuit using subcircuits"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this section, we will build up the teleportation circuit using subcircuits. This allows us to initialize different instances of the state to be teleported, as you will see below. \n",
    "\n",
    "Note the small change in the measurement of qubit 2 -- we are measuring along the Hadamard basis, instead of along the z axis. This is achieved by the use of a Hadamard gate before the measurement."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1300.32x264.88 with 1 Axes>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def create_state_psi(theta):\n",
    "    # Create a state along the x axis on the x-y plane and then rotate it by angle theta around the z-axis\n",
    "    # theta = 0 => state is exactly along x\n",
    "    # theta = pi/2 => state is exactly along y\n",
    "    create_circuit = QuantumCircuit(1, name='create_state_psi')\n",
    "    create_circuit.h(0)\n",
    "    create_circuit.rz(theta, 0)\n",
    "    return create_circuit\n",
    "\n",
    "def create_Bell_pair():\n",
    "    create_Bell_circuit = QuantumCircuit(2, name='create_Bell_pair')\n",
    "    create_Bell_circuit.h(0)\n",
    "    create_Bell_circuit.cx(0,1)\n",
    "    return create_Bell_circuit\n",
    "\n",
    "def teleportation_Alice():\n",
    "    teleportation_Alice_circuit = QuantumCircuit(2, name='teleportation_Alice')\n",
    "    teleportation_Alice_circuit.cx(0,1)\n",
    "    teleportation_Alice_circuit.h(0)\n",
    "    return teleportation_Alice_circuit\n",
    "\n",
    "def Alice_measure():\n",
    "    Alice_measure_circuit = QuantumCircuit(2, 2, name='Alice_measure')\n",
    "    Alice_measure_circuit.measure([0,1], [0,1])\n",
    "    return Alice_measure_circuit\n",
    "\n",
    "def teleportation_Bob():\n",
    "    teleportation_Bob_circuit = QuantumCircuit(3, name='teleportation_Bob')\n",
    "    teleportation_Bob_circuit.cx(1,2)\n",
    "    teleportation_Bob_circuit.cz(0,2)\n",
    "    return teleportation_Bob_circuit\n",
    "\n",
    "def build_circuit(theta):\n",
    "    circuit = QuantumCircuit(3, 3)\n",
    "    # Step 0: create the state to teleport\n",
    "    circuit.append(create_state_psi(theta).to_instruction(), [0])\n",
    "    circuit.barrier()\n",
    "    # Step 1: create the Bell pair between Alice and Bob's qubits\n",
    "    circuit.append(create_Bell_pair().to_instruction(), [1,2])\n",
    "    circuit.barrier()\n",
    "    # Step 2: Alice applies a series of operations\n",
    "    circuit.append(teleportation_Alice().to_instruction(), [0,1])\n",
    "    circuit.barrier()\n",
    "    # Step 3: Alice measures her two qubits\n",
    "    circuit.append(Alice_measure().to_instruction(), [0,1], [0,1])\n",
    "    circuit.barrier()\n",
    "    # Step 4: Bob applies operations to his qubit depending on Alice's measurement outcomes\n",
    "    circuit.append(teleportation_Bob().to_instruction(), [0,1,2])\n",
    "    circuit.barrier()\n",
    "    # Step 5: Done. Now measure Bob's qubit to be sure that teleportation was successful\n",
    "    circuit.h(2) # note that the Hadamard gate here ensures that we measure in the Hadamard basis instead of z basis\n",
    "    circuit.measure([0,1,2], [0,1,2])\n",
    "    return circuit\n",
    "\n",
    "circuit = build_circuit(0.01)\n",
    "circuit.draw(output='mpl')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In order to expand the circuit above, we can write"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1360.52x264.88 with 1 Axes>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "circuit.decompose().draw(output='mpl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'000': 269, '011': 256, '010': 225, '001': 274}\n"
     ]
    }
   ],
   "source": [
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "result = execute(circuit, backend=simulator, shots=1024).result()\n",
    "counts = result.get_counts(circuit)\n",
    "print(counts)\n",
    "num_c2_zero = sum(counts[c2c1c0] for c2c1c0 in counts if c2c1c0[0] == '0')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Now, let's make a loop that iterates over several initial angles $\\theta$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "thetas = np.arange(0, 4*np.pi, np.pi/16)\n",
    "\n",
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "\n",
    "percent_ones = []\n",
    "\n",
    "for theta in thetas:\n",
    "    circuit = build_circuit(theta)\n",
    "    result = execute(circuit, backend=simulator, shots=1024).result()\n",
    "    counts = result.get_counts(circuit)\n",
    "    num_c2_ones = sum(counts[c2c1c0] for c2c1c0 in counts if c2c1c0[0] == '1')\n",
    "    percent_ones.append(num_c2_ones*100./1024)\n",
    "    \n",
    "import matplotlib.pyplot as plotter\n",
    "plotter.plot(thetas, percent_ones)\n",
    "plotter.xlabel('Initial angle, theta (radians)')\n",
    "plotter.ylabel('Percentage of 1 counts')\n",
    "plotter.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you can see, the measurement results show a sinusoidal periodicity. Since we are measuring along the Hadamard basis, and we begin with a state that is entirely along the $x$-axis, we are able to follow the change in phase "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Running the teleportation circuit on real quantum hardware"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As before, we will now create circuits for various values of $\\theta$, and then send all the circuits to the IBMQ backend called `ibmq_16_melbourne`. We will map the qubits 0, 1 and 2 to the physical qubits 6, 8 and 7, respectively."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# build circuits\n",
    "thetas = np.arange(0, 4*np.pi, np.pi/16)\n",
    "\n",
    "circuits = []\n",
    "for theta in thetas:\n",
    "    circuit = build_circuit(theta)\n",
    "    circuits.append(circuit)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5d6b173be17db40011ea24cf\n",
      "Job Status: job has successfully run\n"
     ]
    }
   ],
   "source": [
    "# load account\n",
    "IBMQ.load_account()\n",
    "provider = IBMQ.get_provider(hub='ibm-q')\n",
    "qcomp = provider.get_backend('ibmq_16_melbourne')\n",
    "\n",
    "# run the job on the backend qcomp\n",
    "job = execute(circuits, backend=qcomp, shots=512, initial_layout=[6,8,7])\n",
    "print(job.job_id())\n",
    "from qiskit.tools.monitor import job_monitor\n",
    "job_monitor(job)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "simresult = execute(circuits, backend=simulator, shots=512).result()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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t33t2jXatGlDzZo1SUpKqtAR4m+//XbTwKtmH9b8d7969SqNGjWif//+zJw50yrbLCotLY02bdpQv359tm7datXWiKtSSiWJSGRxj+mWghubOHEily5d4vXXX7f6tv38/Pjkk09ITk7myy91JXR3NWvWLC5fvszIkbZbj1qjRg0+++wzduzYcdMUXq1idEvBTV2/fp3AwEBCQkJYtWqVTfYhIsTFxbF161b27dtHvXr1yn5RIbqlYAxr/buLCO3atcPT05Pt27fbtJKuiNC/f3/Wrl3Lnj17dAXlMuiWgnaLqVOncvbsWZu0EvIppfjss8+4du2aTfdja++++y7BwcGEhoYSFhbGli1beOqpp9izZ49Vth8QEMD58+dLfc57771nlX3Z0/r169m1axejRo2yeWl1pRQTJkwgOzubDz/80Kb7cnklzVV1hotep1AxGRkZcvvtt0vnzp2LrUxpbU8++aRUrVpVsrKyyvU6R1insHHjRunUqZPcuHFDRPIKAJ48edKq+yipemphhau1miO/6F1FWOvf/eGHH5aaNWtKenq6VbZnjqFDh0q1atWsXpzR1aDXKWiFzZw5k99//51//vOfdjk5TkxMDFevXuXXX3+1+b6s7fTp09SpU4dKlSoBeQUAGzZsSHR0dMFsl6pVq/Lyyy8THBxMTEwMW7duJTo6mmbNmhUM4E+bNo3Ro0cXbLdfv36sLaZg37333ktERATBwcFMnjwZgFdffbWgMN+jjz4KwCeffELbtm1p27Ytn376KQBHjx6lVatWPP7447Rt25bjx4/fsn17SU1NZf78+TzxxBP4+fnZbb+jRo3iypUrfPPNN3bbp6vRw/RuJicnh/fff5/27dvTu3fRU2jbRrdu3QD45ZdfiIiIqNA2XnjhhYLaP9YSFhZW8INakl69evH222/TsmVLYmJieOihh7jrrrtuek56ejo9evTgo48+YtCgQfzzn/9k1apV7Nmzh2HDhpldcRbyuvX8/f25fv06d955J/fddx/vv/8+n3/+ecH7T0pK4uuvv2bLli2ICB07duSuu+6iVq1aHDhwgOnTp5dZXsPWvv/+e7KysvjLX/5i1/126NCBiIgIvvjiC5599lmXPSOgLemWgpuZO3cuBw4c4B//+IfdvjCNGjWiWbNmTrlmoWrVqiQlJTF58mTq1q3LQw89xLRp0256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lGDPnj383//9HwMHDtSDftpNoqOjadu2LZ9++im5ublW2ebZs2dZt26dbiVoAFSuXJl///vfbNu2zS5rYwrTSaEYmZmZDB06lKpVqzJx4kRde0a7iVKKV199lV27djFlyhSrbHPx4sWIiE4KWoHHHnuMkJAQXnvtNTIzM+22X50UivH222+zfft2Jk+eTP369Y0OR3NAQ4YM4e677+aVV16xSqG8BQsWcMcddxASEmKF6DRX4OnpyQcffMDhw4d599137bZfnRSK2LhxI//5z38YPnw4gwYNMjoczUEppZg4cSLXr1/nxRdftGhbp0+fJiEhgcGDB+tWqXaT3r17M2TIEN5++21eeOEFcnJybL5PnRQKuXr1KkOHDuX222/n008/NToczcG1bNmS119/ne+++47ly5dXaBv79++nS5cueHl5MWzYMCtHqDk7pRQzZszghRdeYNy4cTz44INWn/V2CxFx2ktERIRY09NPPy1KKfnll1+sul3Ndd24cUNatWolgYGBkp6eXq7XbtiwQWrXri1169aVLVu22ChCzVV88sknopSSzp07S2pqqkXbAhKlhN9V3VIgLzHOmDGDKVOmMHbsWLp162Z0SJqTqFSpEpMmTeLIkSPlWssyf/58evbsib+/P5s2baJDhw42jFJzBS+++CLff/89SUlJdO7cmcOHD9tmRyVlCyMuQG9gH3AQeLWs51ujpbB9+3a5++67BZCOHTvKjRs3LN6m5n6GDx8uXl5ekpycXOrz0tLS5D//+Y8opSQqKsriIz7N/axfv178/f3lf//7X4W3QSktBcMTQUEg4AkcApoBPsCvQFBpr7EkKZw4cUKeeOIJUUpJ7dq1Zfz48ZKZmVnh7Wnu7fz581KnTh3x9/eX++67T8aNGyfbt2+X7OxsOXfunEyZMkX69u0rPj4+AsjgwYPl2rVrRoetOSlbdh85UnW3DsBBETkMoJT6DhgI7LH2jqZOncpzzz1HdnY2f//73/nHP/5BzZo1rb0bzY3Url2bJUuWMGHCBNatW8f8+fMBqFatGunp6eTm5hIYGMhzzz3HoEGD6Ny5s55ppFVYnTp1bLZtR0oKjYDjhW6fADoWfZJSagQwAqjweQ2aN29Ov379eP/99wkMDKzQNjStqE6dOtGpUycgr7jdunXr2LhxI3Xq1GHQoEG0a9dOJwLN4am8loTx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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = job.result()\n",
    "\n",
    "percent_ones = []\n",
    "for circuit in circuits:\n",
    "    thiscircuit_counts = result.get_counts(circuit)\n",
    "    num_c2_ones = sum(thiscircuit_counts[c2c1c0] for c2c1c0 in thiscircuit_counts if c2c1c0[0] == '1')\n",
    "    percent_ones.append(num_c2_ones*100./512)\n",
    "    \n",
    "percent_ones_sim = []\n",
    "for circuit in circuits:\n",
    "    thiscircuit_counts = simresult.get_counts(circuit)\n",
    "    num_c2_ones = sum(thiscircuit_counts[c2c1c0] for c2c1c0 in thiscircuit_counts if c2c1c0[0] == '1')\n",
    "    percent_ones_sim.append(num_c2_ones*100./512)\n",
    "    \n",
    "\n",
    "plotter.plot(thetas, percent_ones, 'r.', label='Real device')\n",
    "plotter.plot(thetas, percent_ones_sim, 'k', label='Simulator')\n",
    "plotter.xlabel('Initial angle, theta (radians)')\n",
    "plotter.ylabel('Percentage of 1 counts')\n",
    "plotter.legend()\n",
    "plotter.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Quantum teleportation over long distances"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the above work, Bob applied quantum gates to his half of the Bell pair based on Alice's qubits. This is a simplified version of the teleportation algorithm. The most useful aspect of the algorithm becomes apparent when, instead of using Alice's qubits for controlling Bob's gates, we use the classical outcomes of the measurement of Alice's qubits for controlling Bob's gates.\n",
    "\n",
    "In Qiskit, this is achieved using `c_if` as shown below. This feature of conditioning a quantum gate on a classical register is currently unavailable on the real quantum hardware, and circuits containing this feature can only be executed on the simulators."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"word-wrap: normal;white-space: pre;background: #fff0;line-height: 1.1;font-family: &quot;Courier New&quot;,Courier,monospace\">         ┌───┐┌───────┐ ░            ░      ┌───┐ ░ ┌─┐    ░                ░ »\n",
       "q0_0: |0>┤ H ├┤ Rz(0) ├─░────────────░───■──┤ H ├─░─┤M├────░────────────────░─»\n",
       "         └───┘└───────┘ ░ ┌───┐      ░ ┌─┴─┐└───┘ ░ └╥┘┌─┐ ░                ░ »\n",
       "q0_1: |0>───────────────░─┤ H ├──■───░─┤ X ├──────░──╫─┤M├─░────────────────░─»\n",
       "                        ░ └───┘┌─┴─┐ ░ └───┘      ░  ║ └╥┘ ░  ┌───┐  ┌───┐  ░ »\n",
       "q0_2: |0>───────────────░──────┤ X ├─░────────────░──╫──╫──░──┤ X ├──┤ Z ├──░─»\n",
       "                        ░      └───┘ ░            ░  ║  ║  ░  └─┬─┘  └─┬─┘  ░ »\n",
       "                                                     ║          │   ┌──┴──┐   »\n",
       " c0_0: 0 ════════════════════════════════════════════╩══════════╪═══╡ = 1 ╞═══»\n",
       "                                                        ║    ┌──┴──┐└─────┘   »\n",
       " c1_0: 0 ═══════════════════════════════════════════════╩════╡ = 1 ╞══════════»\n",
       "                                                             └─────┘          »\n",
       " c2_0: 0 ═════════════════════════════════════════════════════════════════════»\n",
       "                                                                              »\n",
       "«              \n",
       "«q0_0: ────────\n",
       "«              \n",
       "«q0_1: ────────\n",
       "«      ┌───┐┌─┐\n",
       "«q0_2: ┤ H ├┤M├\n",
       "«      └───┘└╥┘\n",
       "«c0_0: ══════╬═\n",
       "«            ║ \n",
       "«c1_0: ══════╬═\n",
       "«            ║ \n",
       "«c2_0: ══════╩═\n",
       "«              </pre>"
      ],
      "text/plain": [
       "<qiskit.visualization.text.TextDrawing at 0x13196b908>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "thetas = np.arange(0, 4*np.pi, np.pi/16)\n",
    "circuits_classicalcontrol = []\n",
    "for theta in thetas:\n",
    "    cr1 = ClassicalRegister(1)\n",
    "    cr2 = ClassicalRegister(1)\n",
    "    cr3 = ClassicalRegister(1)\n",
    "    qr = QuantumRegister(3)\n",
    "    circuit = QuantumCircuit(qr, cr1, cr2, cr3)\n",
    "\n",
    "    # ========================\n",
    "    # Step 0: Create the state to be teleported in qubit 0\n",
    "    circuit.h(0)\n",
    "    circuit.rz(theta, 0)\n",
    "    circuit.barrier()\n",
    "    # ========================\n",
    "    # Step 1: create an entangled Bell pair between Alice and Bob (qubits 1 and 2)\n",
    "    circuit.h(1)\n",
    "    circuit.cx(1,2)\n",
    "    circuit.barrier()\n",
    "    # ========================\n",
    "    # Step 2: Alice applies a series of operations \n",
    "    # between the state to teleport (qubit 0) and her half of the Bell pair (qubit 1)\n",
    "    circuit.cx(0,1)\n",
    "    circuit.h(0)\n",
    "    circuit.barrier()\n",
    "    # ========================\n",
    "    # Step 3: Alice measures both qubits 0 and 1\n",
    "    circuit.measure([0, 1], [0, 1]) # results stored in classical bits 0 and 1, respectively\n",
    "    circuit.barrier()\n",
    "    # ========================\n",
    "    # Step 4: Now that Alice has measured the two qubits, their states have collapsed to 0 and 1. \n",
    "    # Use the classical bits from Alice's measurements to do operations on Bob's half of the Bell pair\n",
    "    circuit.x(2).c_if(cr2, 1)\n",
    "    circuit.z(2).c_if(cr1, 1)\n",
    "    circuit.barrier()\n",
    "    # Step 5: Done! Measure Bob's qubit in the Hadamard basis to find out what state it is in\n",
    "    circuit.h(2)\n",
    "    circuit.measure([2], [2])\n",
    "    \n",
    "    circuits_classicalcontrol.append(circuit)\n",
    "    \n",
    "circuits_classicalcontrol[0].draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXxU1fnH8c+ThYR9F4EoCQKyBpOACSAECBCEAGJdEBE3xFqq1n35tda22qLVuleldaGKyCKiLAYBWSVkg7BDQUAMIIR9CWR9fn/MTBowwCSZmTvLeb9e88qs934nhHnmnnPPOaKqGIZhGAZAkNUBDMMwDO9hioJhGIZRxhQFwzAMo4wpCoZhGEYZUxQMwzCMMiFWB6iOJk2aaGRkpNUxDMMwfEp2dvYhVW1a0WM+XRQiIyPJysqyOoZhGIZPEZEfL/SYaT4yDMMwypiiYBiGYZQxRcEwDMMo49N9CkbgKSoqIjc3l7Nnz1odxS+Eh4cTERFBaGio1VEML2GKguFTcnNzqVu3LpGRkYiI1XF8mqpy+PBhcnNziYqKsjqO4SXc1nwkIh+KyEER2VjuvkYislBEttt/NrTfLyLypojsEJH1IhLrrlyGbzt79iyNGzc2BcEFRITGjRuboy7jHO7sU/gYGHzefU8Di1W1LbDYfhvgeqCt/TIeeNeNuQwfZwqC65jfpXE+txUFVV0OHDnv7hHAZPv1ycAN5e7/j9qsBhqISHN3ZTMqb//+/bz77rv88MMPVkcx/Jiq8t133zF16lSKi4utjhOQPH32UTNV3W+//jPQzH69JfBTuefl2u/7BREZLyJZIpKVl5fnvqQGALt27eKBBx4gMjKS3/zmN3To0IHHHnuMo0ePWh3NUi+++CKdOnUiOjqaa665hvT0dMaNG8fmzZtdsv3IyEgOHTp00ef89a9/dcm+vIGq8vXXX5OQkEBSUhKjR48mISGBnJwcq6MFHlV12wWIBDaWu33svMeP2n/OBa4rd/9ioNulth8XF6eGe2zdulXHjh2rwcHBWqNGDR0/frympaXpPffcoyKijRo10tdff10LCgo8mmvz5s0e3V9FVq1apQkJCXr27FlVVc3Ly9O9e/e6dB+tWrXSvLy8iz6ndu3aldpmaWmplpSU/OJ+K3+nJSUlOnXqVO3SpYsCGhkZqe+++65OnTpVL7vsMg0ODtannnpK8/PzLcvoj4AsvdDn9oUecMWlgqKwDWhuv94c2Ga//j5wW0XPu9jFFAX32Llzp9auXVtr1aqljzzyiObm5p7zeE5Ojg4YMEABbd26tf7xj3/UdevWaWlpqduzeUNR+OKLLzQlJeUX9ycmJmpmZqaq2j6wH3/8ce3YsaMmJSVpenq6JiYmalRUlH711VeqqvrRRx/phAkTyl4/dOhQXbJkiaqeWxRGjBihsbGx2rFjR33//fdVVfWpp57SoKAg7dq1q44ePVpVVV999VXt1KmTdurUSV977TVVVd21a5e2a9dO77jjDu3YsaPu3r37F7mt/J0+/fTTCmiHDh30P//5jxYWFpY9dvjwYb3nnnsU0KuuukpXrFhhWU5/401F4e/A0/brTwMv268PBb4BBEgAMpzZvikKrldaWqqDBw/WOnXq6K5duy76vHnz5mmfPn1URMr+4z7xxBO6YcMGt+Ur/wH28MMPa2JioksvDz/88CUznDx5Urt27apt27bVBx54QJcuXaqq5xYFQOfPn6+qqjfccIMOHDhQCwsLNScnR7t27aqqzheFw4cPq6pqfn6+durUSQ8dOqSq5x4pZGVlaefOnfXUqVN68uRJ7dixo65Zs0Z37dqlIqJpaWlO/U49acGCBQrovffeW+ERjMPixYu1devWWqdOHd2yZYsHE/qvixUFd56SOhVIA64WkVwRuReYCAwUke3AAPttgPnATmAH8C/gN+7KZVzc9OnTSU1N5cUXX+RiM9CKCEOGDGHZsmXs37+fSZMm0bZtW15//XUSEhI4fvy450J7WJ06dcjOzmbSpEk0bdqUW2+9lY8//vic59SoUYPBg20n33Xp0oXExERCQ0Pp0qULu3fvrtT+3nzzTbp27UpCQgI//fQT27dv/8VzVq5cyciRI6lduzZ16tThxhtvZMWKFQC0atWKhISEKr1Xd/n555+544476Ny5M2+99RZBQRf+KOrfvz/Lli2jZs2a3HjjjZw8edKDSQOP2wavqeptF3goqYLnKjDBXVkM5xw7doyHH36YuLg4Jkxw/p+jWbNm3Hfffdx3330sW7aMvn37snDhQm666SY3poXXX3/drdu/mODgYPr27Uvfvn3p0qULkydPPufx0NDQstM9g4KCCAsLK7vuOKsmJCSE0tLSstdUNF5g6dKl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/NhNN91EjRo1+PTTTy3NsX79erZt22aajvyYt/UrmKJQBTNmzCA0NNTMUunHGjRoQEpKStk6yFaZPn06wcHB3HjjjZZlMNzr6quvplmzZqYo+CpVZebMmQwaNIgGDRpYHcdwo9tvv50DBw5YNsWxqjJt2jT69+9vpmT3Y45+hWXLlnlFv4IpCpWUlZXFnj17TNNRABgyZAgNGjSw7CyktWvX8sMPP5gBawGgT58+/PTTT/z4449WRzFFobJmzpxJSEhI2chXw3+Fh4dz8803M2vWLEtWZJs2bRohISFmSvYA4E39CqYoVEJJSQnTp08nKSmJRo0aWR3H8IDbb7+d06dP8/XXX3t0v46zjgYOHGj+1gJAp06daNSokSkKvmby5Mns3r2b++67z+oohof07t2bK664wuNnIaWnp7N7927TdBQggoKCyvoVrGaKgpPy8/N57rnniI+PN2eCBJCgoCBGjx7NggULPNbeW1paypNPPkmjRo244YYbPLJPw3qJiYns3LmT3NxcS3OYouCkN998k7179/Lyyy+bBU4CzAMPPEBYWBi//vWvPXJ2yEcffcSKFSv4+9//Tv369d2+P8M7eEu/gikKTjh06BB/+9vfGDZsGH369LE6juFhrVq1YuLEiaSmpjJ58mS37uvgwYM88cQT9OnTh7vvvtut+zK8S3R0NPXr1+eLL77gzJkzluUwRcEJL774IqdOnWLixIlWRzEsMmHCBK677joeeeQRty7A89hjj3Hq1Cnee+89c0QaYIKDg7nzzjv58ssviYqK4u9//zsnT570fBBV9dlLXFycutvOnTs1NDRU7733Xrfvy/Bu//3vfzU8PFyHDx+upaWlLt/+t99+q4A+99xzLt+24RtKS0t1yZIlOmDAAAW0YcOG+vzzz+vx48dduh8gSy/wuWr5B3t1Lp4oCqNHj9aaNWtqbm6u2/dleL9XXnlFAf3ss89cut38/Hy96qqrtG3btnrmzBmXbtvwTenp6TpixAgFdPDgwS79ImKKQhVlZ2croM8++6xb92P4juLiYo2Pj9fGjRvrzz//7LLtPvvsswro4sWLXbZNwz+8/vrrCujnn3/usm1erCiI7XHf1K1bN83KynLLts+ePUv//v3573//yw8//GDOAjHKbN68mZiYGIYNG8aMGTOq3faflpZGnz59GD16tNs7sg3fU1JS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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "simulator = Aer.get_backend('qasm_simulator')\n",
    "simresult_classicalcontrol = execute(circuits_classicalcontrol, backend=simulator, shots=512).result()\n",
    "\n",
    "percent_ones_sim = []\n",
    "for ii in range(len((circuits))):\n",
    "    thiscircuit_counts = simresult_classicalcontrol.get_counts(ii)\n",
    "    num_c2_ones = sum(thiscircuit_counts[c2c1c0] for c2c1c0 in thiscircuit_counts if c2c1c0[0] == '1')\n",
    "    percent_ones_sim.append(num_c2_ones*100./512)\n",
    "    \n",
    "plotter.plot(thetas, percent_ones_sim, 'k', label='Simulator')\n",
    "plotter.xlabel('Initial angle, theta (radians)')\n",
    "plotter.ylabel('Percentage of 1 counts')\n",
    "plotter.legend()\n",
    "plotter.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that the above results were achieved without any quantum gates between qubits 1 and 2 after they were entangled. In fact, the two qubits can be physically separated. As long as the classical information from the two measurements of Alice's qubits can be transferred quickly enough, teleportation can be achieved over long distances."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# References"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Journal Papers\n",
    "\n",
    "1. Charles Bennett et al., \n",
    "Teleporting an Unknown Quantum State via Dual Classical and Einstein-Podolsky-Rosen Channels. \n",
    "Phys. Rev. Lett. **70**, 1895 (1993). <a id='1'>https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.70.1895</a>\n",
    "\n",
    "\n",
    "2. W. K. Wootters & W. H. Zurek, \n",
    "A single quantum cannot be cloned. \n",
    "Nature **299**, 802 (1982). <a id='2'>https://www.nature.com/articles/299802a0</a>\n",
    "\n",
    "#### Tutorials\n",
    "For detailed information about Qiskit, check out the tutorials in the Github repository:\n",
    "\n",
    "https://github.com/Qiskit/qiskit-iqx-tutorials\n",
    "\n",
    "For a pedagogical presentation of the mathematics behind the quantum teleportation circuit, check out our open-source `Learn Quantum Computation using Qiskit` textbook:\n",
    "\n",
    "https://community.qiskit.org/textbook/"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Version"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It's good to note the Qiskit version that was used in your work. One way to do this is print the version at the bottom of the Jupyter notebook using"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'qiskit-terra': '0.9.0',\n",
       " 'qiskit-ignis': '0.2.0',\n",
       " 'qiskit-aqua': '0.6.0',\n",
       " 'qiskit': '0.12.0',\n",
       " 'qiskit-aer': '0.3.0',\n",
       " 'qiskit-ibmq-provider': '0.3.2'}"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "qiskit.__qiskit_version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of Qiskit</h3><p>&copy; Copyright IBM 2017, 2019.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import qiskit.tools.jupyter\n",
    "%qiskit_copyright"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
